desc:Comp Test3

slider1:0<-20,20,1>In
slider2:0<-40,0,0.01>Treshold
//slider3:1<0,4,1{2,4,8,20,Lim}>Ratio
slider3:4<1,10,0.01>Ratio (10 = Lim)
slider4:3<0,10,1>Knee
slider5:4<0.01,1000,0.01>Attack
slider6:200<10,1000,0.01>Release
slider7:0<-12,12,1>Gain

@init
gr_meter=1;

@slider
T=slider2;
/*
slider3==0 ? r=2;
slider3==1 ? r=4;
slider3==2 ? r=8;
slider3==3 ? r=20;
slider3==4 ? r=10000;
*/
r=slider3;r==10 ? r=10000;  

W=slider4;

aa=exp(-log(9)*1000/srate/slider5);
ar=exp(-log(9)*1000/srate/slider6);

@block


@sample

in=max(abs(spl0),abs(spl1)); // Detecet IN

indb=20*log10(in);
indb+= slider1;
a=indb;

indb<=(T-w/2) ? insc=indb:
 
indb>=(T+w/2) ? insc=(T+(indb-T)/r)
 : (

insc=indb+(1/r-1)*((indb-T+W/2)^2)/2/W
              
)
;

g=insc-indb;

g<g0 ? (g=aa*g0 + (1-aa)*g) : (g=ar*g0 + (1-ar)*g); g0=g; g1=g0;

spl0=spl0*10^((slider1+g+slider7)/20);
spl1=spl1*10^((slider1+g+slider7)/20);


@gfx 0 32 // request horizontal/vertical heights (0 means dont care)

  gr_meter=min(10^(g/20),gr_meter);
  gr_meter *= exp(1/60); gr_meter>1 ? gr_meter=1; // decay meter here so if the audio processing stops it doesnt "stick"
  gfx_r=1; gfx_g=gfx_b=0; gfx_a=0.8;
  
  meter_bot=20;
  meter_h=min(gfx_h,32);
  xscale=gfx_w*20/meter_bot;

  gfx_y=0;
  gfx_x=gfx_w + log10(gr_meter)*xscale;
  gfx_rectto(gfx_w,meter_h);

  gfx_r=gfx_g=gfx_b=1.0; gfx_a=0.6;

  s2=sqrt(2)/2;
  gg = s2;
  while(
    gfx_x=gfx_w + log10(gg)*xscale;
    gfx_x >= 0 ? 
    (
      gfx_y=0;
      gfx_lineto(gfx_x,meter_h,0);
      gfx_y=meter_h-gfx_texth;
      gfx_x+=2;
      gfx_drawnumber(log10(gg)*20,0);
      gfx_drawchar($'d');
      gfx_drawchar($'B');
    );
    gg*=s2;
    gfx_x >=0;
  );
  gfx_a=1;

  gfx_x=0; gfx_y=meter_h/2 - gfx_texth/2;
  gfx_drawnumber(log10(gr_meter)*20,1);
  gfx_drawchar($'d');
  gfx_drawchar($'B');
